function plot_noma_results(user_symbols, superposed_signal, received_signals, alpha, ber)
% plot_noma_results - 绘制NOMA仿真结果
%
% 输入参数:
%   user_symbols      - 用户调制符号的元胞数组
%   superposed_signal - 叠加后的NOMA信号
%   received_signals  - 接收信号的元胞数组，包含近用户和远用户的接收信号
%   alpha            - 功率分配系数
%   ber              - 各用户的误码率

% 创建图形窗口
figure('Name', 'NOMA仿真结果', 'Position', [100, 100, 1200, 800]);

% 星座图 - 近用户和远用户的原始符号
subplot(3, 3, 1);
scatter(real(user_symbols{1}), imag(user_symbols{1}), 'b.', 'DisplayName', '近用户');
hold on;
scatter(real(user_symbols{2}), imag(user_symbols{2}), 'r.', 'DisplayName', '远用户');
title('原始用户符号星座图');
xlabel('实部');
ylabel('虚部');
grid on;
legend('Location', 'best');
axis([-1.5 1.5 -1.5 1.5]);

% 星座图 - 叠加后的NOMA信号
subplot(3, 3, 2);
scatter(real(superposed_signal), imag(superposed_signal), 'k.', 'DisplayName', 'NOMA叠加信号');
title('NOMA叠加信号星座图');
xlabel('实部');
ylabel('虚部');
grid on;
axis([-2 2 -2 2]);

% 功率谱密度 - 叠加信号
subplot(3, 3, 3);
[psd, f] = pwelch(superposed_signal, 256, 128, 512, 1, 'centered');
plot(f, 10*log10(psd));
title('NOMA信号功率谱密度');
xlabel('归一化频率');
ylabel('功率谱密度 (dB/Hz)');
grid on;

% 星座图 - 近用户接收信号
subplot(3, 3, 4);
received_near = received_signals{1};
scatter(real(received_near), imag(received_near), 'b.', 'DisplayName', '接收信号');
title('近用户接收信号星座图');
xlabel('实部');
ylabel('虚部');
grid on;
axis([-2 2 -2 2]);

% 星座图 - 远用户接收信号
subplot(3, 3, 5);
received_far = received_signals{2};
scatter(real(received_far), imag(received_far), 'r.', 'DisplayName', '接收信号');
title('远用户接收信号星座图');
xlabel('实部');
ylabel('虚部');
grid on;
axis([-2 2 -2 2]);

% 绘制SIC过程示意图
subplot(3, 3, 6);
% 创建简单的示意图说明SIC过程
text(0.5, 0.8, '连续干扰消除(SIC)过程:', 'FontWeight', 'bold');
text(0.1, 0.6, '1. 近用户先解码远用户信号');
text(0.1, 0.5, '2. 从接收信号中减去远用户信号');
text(0.1, 0.4, '3. 然后解码自己的信号');
text(0.1, 0.2, '远用户直接解码自己的信号');
text(0.1, 0.1, '(近用户信号视为噪声)');
axis off;

% 功率分配比例图
subplot(3, 3, 7);
bar([1, 2], [alpha(1), alpha(2)], 'FaceColor', 'flat');
colormap(gca, [0 0 1; 1 0 0]);  % 蓝色和红色
title('功率分配系数');
xlabel('用户');
ylabel('功率分配比例');
xticks([1, 2]);
xticklabels({'近用户', '远用户'});
ylim([0, 1]);
grid on;

% 误码率柱状图
subplot(3, 3, 8);
bar([1, 2], ber, 'FaceColor', 'flat');
colormap(gca, [0 0 1; 1 0 0]);  % 蓝色和红色
title('用户误码率(BER)');
xlabel('用户');
ylabel('误码率');
xticks([1, 2]);
xticklabels({'近用户', '远用户'});
set(gca, 'YScale', 'log');  % 使用对数尺度以便更好地显示
grid on;

% NOMA与传统正交多址接入比较
subplot(3, 3, 9);
x = 0:0.01:1;
y1 = log2(1 + 10*x);  % NOMA近用户理论速率
y2 = log2(1 + 10*x./(1+5*x));  % NOMA远用户理论速率
y3 = 0.5*log2(1 + 10*x*2);  % 传统OMA用户理论速率

plot(x, y1, 'b-', 'LineWidth', 2, 'DisplayName', 'NOMA近用户');
hold on;
plot(x, y2, 'r-', 'LineWidth', 2, 'DisplayName', 'NOMA远用户');
plot(x, y3, 'k--', 'LineWidth', 2, 'DisplayName', '传统OMA');
title('NOMA vs OMA理论速率比较');
xlabel('归一化SNR');
ylabel('速率 (bps/Hz)');
legend('Location', 'northwest');
grid on;

% 添加总标题
sgtitle('NOMA (非正交多址) 仿真结果');

end 